from django.db import models
from dingxiang.utils.models import BaseModel
from stdimage import StdImageField
from django.utils.safestring import mark_safe
import json, datetime
# 不支持上传文件
from ckeditor.fields import RichTextField
# 支持上传文件
from ckeditor_uploader.fields import RichTextUploadingField
recomment_home = models.BooleanField(default=False,verbose_name='是否推荐首页栏目')
direction = models.ForeignKey("CourseDirectionModel", related_name="category_list", null=True, blank=True, on_delete=models.DO_NOTHING, verbose_name='方向')

avatar = StdImageField(upload_to='teacher/',null=True,verbose_name='头像',
	variations={
		'thumb_800x800': {'width': 800, 'height': 800},  # 'large': (600, 400),
        	'thumb_400x400': {'width': 400, 'height': 400},  # 'medium': (300, 200),
        	'thumb_50x50': {'width': 50, 'height': 50}  # 'thumbnail': (100, 100),
        }
)
brief = RichTextUploadingField(verbose_name="个人描述")

COURSE_TYPE_CHOICES = {
    (0,'付费购买'),
    (1,'会员'),
    (2,'学位课程'),
}
LEVEL_CHOICES = {
    (0,'初级'),
    (1,'中级'),
    (2,'高级'),
}
STATUS_CHOICES = {
    (0, '上线'),
    (1, '下线'),
    (2, '预上线'),
}
# 视频封面
course_cover = StdImageField(upload_to="course/cover/",blank=True,null=True,verbose_name="视频封面",
                                variations={
                                    'thumb_800x800':{'width': 800, 'height': 800},#'large': (600, 400),
                                    'thumb_400x400':{'width': 400, 'height': 400},#'medium': (300, 200),
                                    'thumb_80x80':{'width': 80, 'height': 80}#'thumbnail': (100, 100),
                                }
                                )
# 支付
course_type = models.SmallIntegerField(choices=COURSE_TYPE_CHOICES,default=0,verbose_name='付费课程')
level = models.SmallIntegerField(choices=LEVEL_CHOICES,default=0,verbose_name='难度等级')
status = models.SmallIntegerField(choices=STATUS_CHOICES,default=0,verbose_name='课程状态')
# 课件 地址、课程路径
attachment_path = models.FileField(upload_to="course/md/",blank=True,null=True,verbose_name="课件文件")
attachment_link = models.CharField(max_length=300,blank=True,null=True,verbose_name='课件路径')
# 课程详情：学习人数、总课时量、已经跟新的课时数量    课程价格
students = models.IntegerField(default=0,verbose_name="学习人数")
lessons = models.IntegerField(default=0,verbose_name='总课时数量')
pub_lessons = models.IntegerField(default=0,verbose_name='已更新的课时数量')
price = models.DecimalField(max_digits=10,decimal_places=2,default=0,verbose_name='课程价格')
# 积分兑换
credit = models.IntegerField(default=0,null=True,blank=True,verbose_name='积分兑换')
class Meta():
    db_table = "fg_course_info"
    verbose_name_plural = "课程信息表"
def __str__(self):
    return self.name

# 支付

# 属性
@property
def discount(self):
    # 拼接折扣信息，返回
    # 课程的优惠信息。
    # 查询，是否参与活动，如果参与，判断是否过期，如果未过期，获取折扣信息，参与当前课程价格计算
    # 获取当前时间，用于比较活动是否过期
    now_time = datetime.datetime.now()
    last_activate = self.price_list.filter(activate__start_time__lt=now_time,activate__end_time__gt=now_time).order_by('-id').first()
    # 拼接数据
    # 计算数据
    # 给前端返回的是具体的折扣信息

    type_text = "优惠类型" #折扣类型
    expire = -1 #过期时间
    price = 0  #优惠后的价格

    # if not last_activate:
    #     print('当前课程没有优惠')
    #     price = self.price

    if last_activate:
        # 有活动，获取当前课程所对应的优惠信息
        print(last_activate.activate.name)
        print(last_activate.activate.end_time)
        # 折扣类型
        print(last_activate.discount.discount_type.name)

        type_text = last_activate.discount.discount_type.name
        # 过期时间      将时间转换称时间戳进行计算
        expire = last_activate.activate.end_time.timestamp() - now_time.timestamp()
        # 价格计算，获取当前课程原价
        course_price = float(self.price)
        # 考虑：限制条件     优惠条件，原价是否满足限制条件
        condition_price = last_activate.discount.condition
        # 判断当前课程价格是否满足限制条件
        if course_price >= condition_price:
            # 计算当前课程参与的优惠了，以及优惠后的价格
            sale = last_activate.discount.sale
            # 判断sale属于哪种类型
            if sale == "0":
                # 免费
                price = 0
            elif sale[0] == '*':
                # 折扣
                price = course_price * float(sale[1:])
                # *  x0.8
                # -   100 - 80
            elif sale[0] == '-':
                # 满减
                price = course_price - float(sale[1:])
            price = float(f"{price:.2f}")
    else:
        print('当前课程没有参与活动')
        price = self.price

    return {
        "type":type_text,
        "expire":expire,
        "price":price
    }
def discount_json(self):
    # 必须转成字符串才能保存到es中。所以该方法提供给es使用的。
    # return json.dumps(self.discount)
    return self.discount

# 头像
avatar = StdImageField(upload_to='teacher/',null=True,verbose_name='头像',
	variations={
		'thumb_800x800': {'width': 800, 'height': 800},  # 'large': (600, 400),
        	'thumb_400x400': {'width': 400, 'height': 400},  # 'medium': (300, 200),
        	'thumb_50x50': {'width': 50, 'height': 50}  # 'thumbnail': (100, 100),
        }
)

# 返回一个图片image标签，  给管理站点返回：站点无法加载图片，返回一个image给站点
def course_cover_small(self):
    #小图展示

    return mark_safe(f'<img style="border-radius:100%" alt="" src="{ self.course_cover.thumb_80x80.url }"></img>')

# 图片的描述
course_cover_small.short_description = '头像图片'
# 图片是否显示
course_cover_small.allow_tags = True
# 设置排序顺序
course_cover_small.admin_order_field = "avatar"